package com.hanserwei.han_picture.service;

import com.hanserwei.han_picture.manager.RedisManager;
import com.hanserwei.han_picture.utils.CaffeineUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 缓存失效服务
 * 用于在图片状态发生变化时清除相关缓存
 *
 * @author hanserwei
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class CacheInvalidationService {

    private final RedisManager redisManager;

    /**
     * 清除所有图片列表缓存
     * 在以下情况下调用：
     * 1. 管理员上传新图片（自动通过审核）
     * 2. 管理员审核通过图片
     * 3. 批量上传中管理员上传的图片
     */
    public void invalidatePictureListCache() {
        try {
            log.info("开始清除图片列表缓存...");

            // 清除本地缓存（Caffeine）
            CaffeineUtil.clearAllPictureCache();
            log.info("本地缓存清除完成");

            // 清除Redis缓存
            redisManager.clearAllPictureCache();

            log.info("图片列表缓存清除完成");
        } catch (Exception e) {
            log.error("清除图片列表缓存失败", e);
        }
    }

    /**
     * 判断是否需要清除缓存
     *
     * @param isAdminOperation 是否是管理员操作
     * @param isApproved       是否审核通过
     * @return 是否需要清除缓存
     */
    public boolean shouldInvalidateCache(boolean isAdminOperation, boolean isApproved) {
        // 管理员操作（自动通过审核）或审核通过的情况需要清除缓存
        return isAdminOperation || isApproved;
    }
}
